class utils {
  /* 把所有 键名 下滑线命名法转换成驼峰命名法 */
  public static convertToCamelCase(obj: any): any {
    if (!!obj) {
      if (typeof obj !== "object") {
        return obj;
      }
      if (Array.isArray(obj)) {
        return obj.map(utils.convertToCamelCase);
      }

      const result: any = {};
      for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
          const camelCaseKey = key.replace(/_([a-z])/g, (match, p1) =>
            p1.toUpperCase()
          );
          result[camelCaseKey] = utils.convertToCamelCase(obj[key]);
        }
      }

      return result;
    } else {
      return obj;
    }
  }
  /* 把所有 键名 驼峰命名法转换成下滑线命名法 */
  public static convertToUnderlineCase(obj: any): any {
    if (!!obj) {
      if (typeof obj !== "object") {
        return obj;
      }
      if (Array.isArray(obj)) {
        return obj.map(utils.convertToUnderlineCase);
      }

      return obj.replace(/([A-Z])/g, "_$1").toLowerCase();
    }
  }

  /* 字符串 下滑线命名法转换成驼峰命名法 */
  public static lineToCamelCase(inputString: string): string {
    return inputString.replace(/_([a-z])/g, (match, p1) => p1.toUpperCase());
  }

  /**
   * 获取 mysql 添加时的有效值
   */
  public static getValidValues = async (form: any, columns: string[]) => {
    return Promise.all(
      columns.map(async (column) => {
        let camelCase = this.lineToCamelCase(column);
        if (form[camelCase] !== undefined) {
          return form[camelCase];
        } else {
          // 如果值为 undefined，使用 MySQL 列的默认值（如果有）
          if (camelCase === "createdTime") {
            // 使用当前时间戳作为默认值
            return Math.floor(Date.now() / 1000);
          } else {
            return "DEFAULT";
          }
        }
      })
    );
  };
}

export default utils;
